package com.fenghuajueli.module_user.utils;

import android.content.Context;
import android.text.TextUtils;

import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.LogUtils;
import com.fenghuajueli.libbasecoreui.baseswitch.SwitchKeyUtils;
import com.fenghuajueli.libbasecoreui.listener.BaseCallBackListener;
import com.fenghuajueli.libbasecoreui.listener.TokenErrorBackListener;
import com.fenghuajueli.libbasecoreui.user.UserInfoUtils;
import com.fenghuajueli.lib_data.constants.EventBusConstants;
import com.fenghuajueli.lib_data.entity.eventbus.EventEntity;
import com.fenghuajueli.lib_data.entity.UserInfoEntity;
import com.fenghuajueli.module_route.UserModuleRoute;
import com.fenghuajueli.module_user.constants.PayConfig;
import com.fenghuajueli.module_user.model.RequestInfoModel;
import com.umeng.socialize.PlatformConfig;

import org.greenrobot.eventbus.EventBus;

/**
 * 用户系统模块需要初始化的东西
 */
public class UserModuleInitUtils {


    /**********华为渠道的固定值为HUAWEI全拼大写，所以需要在自己项目中将华为渠道使用全拼，不要使用HW等，
     * 可以使用huawei HUAWEI等，内部自动做了大写转换去判断是否是华为渠道***********/
    public static void init(Context context) {
        //一些加密接口需要用到这个参数
        RequestInfoModel.APP_ID ="ANDROID_com.qfql.timemanagement";
        UserInfoUtils.getInstance().localLogin();
        if (!TextUtils.isEmpty(PayConfig.WECHAT_APP_ID) && !TextUtils.isEmpty(PayConfig.WECHAT_APP_SECRET)) {
            PlatformConfig.setWeixin(PayConfig.WECHAT_APP_ID, PayConfig.WECHAT_APP_SECRET);
        }
        PlatformConfig.setWXFileProvider(context.getPackageName() + ".fileProvider");
        PlatformConfig.setQQFileProvider(context.getPackageName() + ".fileProvider");
    }


    /**
     * 此方法是给登录之后，刷新用户信息使用，会有对应的eventbus事件发送 如有需要监听即可，如果登录之后退出APP
     * 再次进入时执行本地登录，然后进入主页的时候刷新用户信息
     */
    public static void updateUserInfoByToken() {
        try {
            if (UserInfoUtils.getInstance().getUserInfoEntity() == null) {
                return;
            }
            if (!SwitchKeyUtils.getPayStatus()) {
                LogUtils.d("付费开关未打开---------------不进行刷新用户信息");
                //如果付费开关未打开（需要隐藏用户系统），则不进行获取用户信息，防止用户未绑定手机进行本地登录时弹出绑定页面，但此时付费又是关闭的
                return;
            }
            RequestInfoModel.getUserInfoNoLifecycle(UserInfoUtils.getInstance().getUserInfoEntity().getToken(), new TokenErrorBackListener<UserInfoEntity.UserInfoBean>() {
                @Override
                public void tokenError(int code, String error) {
                    UserInfoUtils.getInstance().clearLoginInfo();
                    EventBus.getDefault().post(new EventEntity(EventBusConstants.LOGIN_OUT, null));
                    ARouter.getInstance().build(UserModuleRoute.USER_LOGIN).navigation();
                }

                @Override
                public void onSuccess(UserInfoEntity.UserInfoBean data) {
                    try {
                        if (data != null) {
                            UserInfoUtils.getInstance().getUserInfoEntity().setUserInfo(data);
                            UserInfoUtils.getInstance().saveUserInfoToLocal(UserInfoUtils.getInstance().getUserInfoEntity());
                            LogUtils.d("通过token获取用户信息成功-----");
                            EventBus.getDefault().post(new EventEntity(EventBusConstants.LOGIN_SUCCESS, data));
                            //如果是vip并且没有绑定或者激活手机号，则在每次登陆后都要提示绑定或激活手机号
                            UserInfoUtils.getInstance().checkOrBindPhone();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onFailed(String error) {
                    LogUtils.d("请求用户信息失败：" + error);
                }

                @Override
                public void onHandlerStart() {

                }
            });
        } catch (Exception e) {
            LogUtils.e("通过本地token登录异常：" + e.toString());
        }
    }

}
